package com.benmei.weike.service;

import com.benmei.weike.common.Constants;
import com.benmei.weike.common.filter.RequestPage;
import com.benmei.weike.dao.McCourseDao;
import com.benmei.weike.dto.McScheduleDetailDto;
import com.benmei.weike.dto.mcCourse.McCoursewareDto;
import com.benmei.weike.entity.McBuyCourse;
import com.benmei.weike.entity.McCourseSchedule;
import com.benmei.weike.exception.ClientException;
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Create by chenhong on 2018/10/18 18:55
 * Description :
 */
@Service
public class McCourseService {
    @Autowired
    private McCourseDao mcCourseDao;

    /**
     * 查询已购买的课程
     *@param reqPage
     *@return: java.util.List<com.benmei.weike.entity.McBuyCourse>
     *@author: C.H
     *@date: 2018/10/18 18:50
     */
    public List<McBuyCourse> list(RequestPage reqPage){
        //获取学生Id
        Integer memb_id= (Integer) reqPage.getObj();

        //设置已买课程 总数量
        reqPage.setTotalRecord(mcCourseDao.findMcSourceCountByMembId(memb_id));

        //分页设置
        PageHelper.startPage(reqPage.getCurrentPage(),reqPage.getPageSize());
        //已购买的课程buyCourses
        List<McBuyCourse>  buyCourses=mcCourseDao.findBuyCourse(memb_id);

        // 当前时间
        Date currentTime=new Date();
        //课程 -课信息
        List<McCourseSchedule> courseSchedules=new ArrayList<>();
        //分析最后上课时间和已上完的课件数量
        for(McBuyCourse buyCourse:buyCourses)
        {
            courseSchedules=mcCourseDao.findCourseScheduleList(buyCourse.getCourse_id());

            //设置最近上课时间，课进度
            for(McCourseSchedule courseSchedule:courseSchedules){
                //判断courseSchedule.getStart_time()课开始时间不为null，且小于当前时间
                if(courseSchedule.getStart_time()!=null && courseSchedule.getStart_time().getTime()<currentTime.getTime()){
                    //课进度
                    buyCourse.setCou_schedule_size(buyCourse.getCou_schedule_size()+1);
                    //最近上课时间
                    buyCourse.setRecent_lessons_time(courseSchedule.getStart_time());
                }
            }
        }
        return buyCourses;

    }


    /**
     * 查询课程中的课列表
     *@param reqPage
     *@return: java.util.List<com.benmei.weike.dto.McScheduleDetailDto>
     *@author: C.H
     *@date: 2018/10/18 19:00
     */
    public List<McScheduleDetailDto> getMcSchedulelist(RequestPage reqPage){
        //currentPage默认1，pageSize默认10
        int  currentPage,pageSize;
        currentPage=reqPage.getCurrentPage();
        pageSize=reqPage.getPageSize();

        //获取学生Id
        Integer memb_id= (Integer) reqPage.getObj();

        //获取课程id
        Integer courseId= reqPage.getMcCourseId();

        //设置分页信息
        PageHelper.startPage(currentPage,pageSize);
        //查询课课程详细信息
        List<McScheduleDetailDto> scheduleList= mcCourseDao.findScheduleListAndTeacher(courseId,memb_id);
        Date now=new Date();
        for(McScheduleDetailDto scheduleDetail:scheduleList){
            //未上课：上课时间未到
            if(scheduleDetail.getStart_time().getTime()>now.getTime()){
                scheduleDetail.setState(Constants.ScheduleState.READY);
                //正在上课：上课开始时间<=当前时间<=上课结束时间
            }else if(scheduleDetail.getStart_time().getTime()<=now.getTime() && scheduleDetail.getEnd_time().getTime()>=now.getTime() ){
                scheduleDetail.setState(Constants.ScheduleState.WORKING);
                //未评价：已经上完课但是评价内容为空
            }else if(scheduleDetail.getEnd_time().getTime()<now.getTime() && StringUtils.isEmpty(scheduleDetail.getContent())){
                scheduleDetail.setState(Constants.ScheduleState.FINISHED);
            }else{
                //已评价
                scheduleDetail.setState(Constants.ScheduleState.COMMENT);
            }
        }
        //查询课数量
        reqPage.setTotalRecord(mcCourseDao.findMcScheduleCountBySourceId(courseId));

        return scheduleList;
    }

    /**
     * 添加老师和课的评价
     *@param reqPage
     *@return: void
     *@author: c.h
     *@date: 2018/10/18 19:02
     */
    public void addComment(Map<String, Object> reqPage) {
        //获取课id
        Integer schedule_id=Integer.parseInt(reqPage.get("mc_course_schedule_id").toString());
        //根据课id查询课件详情
        Map<String,Object> mcSchedule=mcCourseDao.findMcScheduleById(schedule_id);
        //根据课id和学生id查询数量，如果大于0则抛客户端异常
        int commentCount= mcCourseDao.findMcScheduleCommentCount(reqPage);
        if(commentCount>0) {
            throw new ClientException("已评价，请勿重复评价");
        }
        reqPage.put("tea_id",mcSchedule.get("tea_id"));
        reqPage.put("mc_course_id",mcSchedule.get("mc_course_id"));
        Date now=new Date();
        reqPage.put("create_date",now);
        reqPage.put("update_date",now);
        //把数据插入表中
        mcCourseDao.addComment(reqPage);
    }

    /**
     * 根据课id获取课件信息
     *@param mcScheduleId
     *@return: java.util.List<com.benmei.weike.dto.mcCourse.McCoursewareDto>
     *@author: C.H
     *@date: 2018/10/18 19:01
     */
    public List<McCoursewareDto> findCoursewares(Integer mcScheduleId) {
        return mcCourseDao.findCourseware(mcScheduleId);
    }
}
